/**
 * @ClassDescription:
 * @JdkVersion: 1.8
 * @Author: 李白
 * @Created: 2024/4/21 22:39
 */
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class OperatorPrecedenceTable {
    private char[][] table;

    public OperatorPrecedenceTable(String filename) {
        // 从文件中读取算符优先分析表
        readTableFromFile(filename);
    }

    private void readTableFromFile(String filename) {
        // 读取输入文件中的算符优先分析表数据
        try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
            // 读取表的行数和列数
            String[] dimensions = reader.readLine().split("\\s+");
            int numRows = Integer.parseInt(dimensions[0]);
            int numCols = Integer.parseInt(dimensions[1]);

            // 初始化表格
            table = new char[numRows][numCols];

            // 读取表格数据
            for (int i = 0; i < numRows; i++) {
                String[] rowData = reader.readLine().split("\\s+");
                for (int j = 0; j < numCols; j++) {
                    table[i][j] = rowData[j].charAt(0);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public char getPrecedence(char stackTop, char input) {
        // 获取栈顶字符和输入字符之间的优先关系
        // 返回 '<' 表示栈顶优先，'>' 表示输入优先，'=' 表示相等，' ' 表示无法比较
        // 在实际应用中，这里可能需要根据具体的算符优先关系表格实现逻辑
        return table[getIndex(stackTop)][getIndex(input)];
    }

    private int getIndex(char ch) {
        // 根据字符返回表格中的索引
        // 这里假设表格中的字符都是ASCII码字符，并且按照顺序排列
        return (int) ch;
    }
}